home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 3 / BBS in a box - Trilogy III.iso / Files / Prog / B-C / Berkeley-yacc-mpw / defs.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-14  |  7.7 KB  |  327 lines  |  [TEXT/MPS ]

  1. /*
  2.  * Copyright (c) 1989 The Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * This code is derived from software contributed to Berkeley by
  6.  * Robert Paul Corbett.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in the
  15.  *    documentation and/or other materials provided with the distribution.
  16.  * 3. All advertising materials mentioning features or use of this software
  17.  *    must display the following acknowledgement:
  18.  *    This product includes software developed by the University of
  19.  *    California, Berkeley and its contributors.
  20.  * 4. Neither the name of the University nor the names of its contributors
  21.  *    may be used to endorse or promote products derived from this software
  22.  *    without specific prior written permission.
  23.  *
  24.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  25.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  28.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  30.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  31.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  32.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  33.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  34.  * SUCH DAMAGE.
  35.  *
  36.  *    @(#)defs.h    5.5 (Berkeley) 1/20/91
  37.  */
  38.  
  39. #include <assert.h>
  40. #include <ctype.h>
  41. #include <stdio.h>
  42.  
  43.  
  44. /*  machine-dependent definitions            */
  45. /*  the following definitions are for the Tahoe        */
  46. /*  they might have to be changed for other machines    */
  47.  
  48. /*  MAXCHAR is the largest unsigned character value    */
  49. /*  MAXSHORT is the largest value of a C short        */
  50. /*  MINSHORT is the most negative value of a C short    */
  51. /*  MAXTABLE is the maximum table size            */
  52. /*  BITS_PER_WORD is the number of bits in a C unsigned    */
  53. /*  WORDSIZE computes the number of words needed to    */
  54. /*    store n bits                    */
  55. /*  BIT returns the value of the n-th bit starting    */
  56. /*    from r (0-indexed)                */
  57. /*  SETBIT sets the n-th bit starting from r        */
  58.  
  59. #define    MAXCHAR        255
  60. #define    MAXSHORT    32767
  61. #define MINSHORT    -32768
  62. #define MAXTABLE    32500
  63. #define BITS_PER_WORD    32
  64. #define    WORDSIZE(n)    (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD)
  65. #define    BIT(r, n)    ((((r)[(n)>>5])>>((n)&31))&1)
  66. #define    SETBIT(r, n)    ((r)[(n)>>5]|=((unsigned)1<<((n)&31)))
  67.  
  68.  
  69. /*  character names  */
  70.  
  71. #define    NUL        '\0'    /*  the null character  */
  72. #define    NEWLINE        '\n'    /*  line feed  */
  73. #define    SP        ' '     /*  space  */
  74. #define    BS        '\b'    /*  backspace  */
  75. #define    HT        '\t'    /*  horizontal tab  */
  76. #define    VT        '\013'  /*  vertical tab  */
  77. #define    CR        '\r'    /*  carriage return  */
  78. #define    FF        '\f'    /*  form feed  */
  79. #define    QUOTE        '\''    /*  single quote  */
  80. #define    DOUBLE_QUOTE    '\"'    /*  double quote  */
  81. #define    BACKSLASH    '\\'    /*  backslash  */
  82.  
  83.  
  84. /* defines for constructing filenames */
  85.  
  86. #define CODE_SUFFIX    ".code.c"
  87. #define    DEFINES_SUFFIX    ".tab.h"
  88. #define    OUTPUT_SUFFIX    ".tab.c"
  89. #define    VERBOSE_SUFFIX    ".output"
  90.  
  91.  
  92. /* keyword codes */
  93.  
  94. #define TOKEN 0
  95. #define LEFT 1
  96. #define RIGHT 2
  97. #define NONASSOC 3
  98. #define MARK 4
  99. #define TEXT 5
  100. #define TYPE 6
  101. #define START 7
  102. #define UNION 8
  103. #define IDENT 9
  104.  
  105.  
  106. /*  symbol classes  */
  107.  
  108. #define UNKNOWN 0
  109. #define TERM 1
  110. #define NONTERM 2
  111.  
  112.  
  113. /*  the undefined value  */
  114.  
  115. #define UNDEFINED (-1)
  116.  
  117.  
  118. /*  action codes  */
  119.  
  120. #define SHIFT 1
  121. #define REDUCE 2
  122.  
  123.  
  124. /*  character macros  */
  125.  
  126. #define IS_IDENT(c)    (isalnum(c) || (c) == '_' || (c) == '.' || (c) == '$')
  127. #define    IS_OCTAL(c)    ((c) >= '0' && (c) <= '7')
  128. #define    NUMERIC_VALUE(c)    ((c) - '0')
  129.  
  130.  
  131. /*  symbol macros  */
  132.  
  133. #define ISTOKEN(s)    ((s) < start_symbol)
  134. #define ISVAR(s)    ((s) >= start_symbol)
  135.  
  136.  
  137. /*  storage allocation macros  */
  138.  
  139. #define CALLOC(k,n)    (calloc((unsigned)(k),(unsigned)(n)))
  140. #define    FREE(x)        (free((char*)(x)))
  141. #define MALLOC(n)    (malloc((unsigned)(n)))
  142. #define    NEW(t)        ((t*)allocate(sizeof(t)))
  143. #define    NEW2(n,t)    ((t*)allocate((unsigned)((n)*sizeof(t))))
  144. #define REALLOC(p,n)    (realloc((char*)(p),(unsigned)(n)))
  145.  
  146.  
  147. /*  the structure of a symbol table entry  */
  148.  
  149. typedef struct bucket bucket;
  150. struct bucket
  151. {
  152.     struct bucket *link;
  153.     struct bucket *next;
  154.     char *name;
  155.     char *tag;
  156.     short value;
  157.     short index;
  158.     short prec;
  159.     char class;
  160.     char assoc;
  161. };
  162.  
  163.  
  164. /*  the structure of the LR(0) state machine  */
  165.  
  166. typedef struct core core;
  167. struct core
  168. {
  169.     struct core *next;
  170.     struct core *link;
  171.     short number;
  172.     short accessing_symbol;
  173.     short nitems;
  174.     short items[1];
  175. };
  176.  
  177.  
  178. /*  the structure used to record shifts  */
  179.  
  180. typedef struct shifts shifts;
  181. struct shifts
  182. {
  183.     struct shifts *next;
  184.     short number;
  185.     short nshifts;
  186.     short shift[1];
  187. };
  188.  
  189.  
  190. /*  the structure used to store reductions  */
  191.  
  192. typedef struct reductions reductions;
  193. struct reductions
  194. {
  195.     struct reductions *next;
  196.     short number;
  197.     short nreds;
  198.     short rules[1];
  199. };
  200.  
  201.  
  202. /*  the structure used to represent parser actions  */
  203.  
  204. typedef struct action action;
  205. struct action
  206. {
  207.     struct action *next;
  208.     short symbol;
  209.     short number;
  210.     short prec;
  211.     char action_code;
  212.     char assoc;
  213.     char suppressed;
  214. };
  215.  
  216.  
  217. /* global variables */
  218.  
  219. extern char dflag;
  220. extern char lflag;
  221. extern char rflag;
  222. extern char tflag;
  223. extern char vflag;
  224.  
  225. extern char *myname;
  226. extern char *cptr;
  227. extern char *line;
  228. extern int lineno;
  229. extern int outline;
  230.  
  231. extern char *banner[];
  232. extern char *tables[];
  233. extern char *header[];
  234. extern char *body[];
  235. extern char *trailer[];
  236.  
  237. extern char *action_file_name;
  238. extern char *code_file_name;
  239. extern char *defines_file_name;
  240. extern char *input_file_name;
  241. extern char *output_file_name;
  242. extern char *text_file_name;
  243. extern char *union_file_name;
  244. extern char *verbose_file_name;
  245.  
  246. extern FILE *action_file;
  247. extern FILE *code_file;
  248. extern FILE *defines_file;
  249. extern FILE *input_file;
  250. extern FILE *output_file;
  251. extern FILE *text_file;
  252. extern FILE *union_file;
  253. extern FILE *verbose_file;
  254.  
  255. extern int nitems;
  256. extern int nrules;
  257. extern int nsyms;
  258. extern int ntokens;
  259. extern int nvars;
  260. extern int ntags;
  261.  
  262. extern char unionized;
  263. extern char line_format[];
  264.  
  265. extern int   start_symbol;
  266. extern char  **symbol_name;
  267. extern short *symbol_value;
  268. extern short *symbol_prec;
  269. extern char  *symbol_assoc;
  270.  
  271. extern short *ritem;
  272. extern short *rlhs;
  273. extern short *rrhs;
  274. extern short *rprec;
  275. extern char  *rassoc;
  276.  
  277. extern short **derives;
  278. extern char *nullable;
  279.  
  280. extern bucket *first_symbol;
  281. extern bucket *last_symbol;
  282.  
  283. extern int nstates;
  284. extern core *first_state;
  285. extern shifts *first_shift;
  286. extern reductions *first_reduction;
  287. extern short *accessing_symbol;
  288. extern core **state_table;
  289. extern shifts **shift_table;
  290. extern reductions **reduction_table;
  291. extern unsigned *LA;
  292. extern short *LAruleno;
  293. extern short *lookaheads;
  294. extern short *goto_map;
  295. extern short *from_state;
  296. extern short *to_state;
  297.  
  298. extern action **parser;
  299. extern int SRtotal;
  300. extern int RRtotal;
  301. extern short *SRconflicts;
  302. extern short *RRconflicts;
  303. extern short *defred;
  304. extern short *rules_used;
  305. extern short nunused;
  306. extern short final_state;
  307.  
  308. /* global functions */
  309.  
  310. extern char *allocate();
  311. extern bucket *lookup();
  312. extern bucket *make_bucket();
  313.  
  314.  
  315. /* system variables */
  316.  
  317. extern int errno;
  318.  
  319.  
  320. /* system functions */
  321.  
  322. extern void free();
  323. extern char *calloc();
  324. extern char *malloc();
  325. extern char *realloc();
  326. extern char *strcpy();
  327.